package com.dp.server;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.dp.client.dto.EstadoPaqueteDTO;
import com.dp.server.entities.EstadoPaquete;
import com.dp.client.servicios.estadopaquete.IServiciosEstadoPaquete;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

public class IServiciosEstadoPaqueteImpl extends RemoteServiceServlet implements IServiciosEstadoPaquete {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private List<EstadoPaqueteDTO> estadoPaquete = null;
	
	static EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("some_name_you_choose");

	public void CargaInicial()
	{
		EntityManager entityManager = entityManagerFactory.createEntityManager();
		
		EstadoPaquete estado1 = new EstadoPaquete(1,"por entrar",1);
		EstadoPaquete estado2 = new EstadoPaquete(2,"almacen",1);
		EstadoPaquete estado3 = new EstadoPaquete(3,"vuelo",1);
		EstadoPaquete estado4 = new EstadoPaquete(4,"recogido",1);
		
		entityManager.getTransaction().begin();
		entityManager.merge(estado1);
		entityManager.merge(estado2);
		entityManager.merge(estado3);
		entityManager.merge(estado4);
		entityManager.getTransaction().commit();
		
		entityManager.close();
	}

	@Override
	public boolean registrarEstadoPaquete(EstadoPaqueteDTO estadoPaqueteDTO) {
		EstadoPaquete estadopaquete = new EstadoPaquete(estadoPaqueteDTO);
		EntityManager entityManager = entityManagerFactory.createEntityManager();
		entityManager.getTransaction().begin();
		entityManager.merge(estadopaquete);
		entityManager.getTransaction().commit();
		entityManager.close();
		
		return true;
	}

	@Override
	public List<EstadoPaqueteDTO> listEstadoPaquete() 
	{
		if(estadoPaquete == null || estadoPaquete.size()<4) CargaInicial();
		else return estadoPaquete;
		EntityManager entityManager = entityManagerFactory.createEntityManager();
		List<EstadoPaquete> lista = entityManager.createQuery("from EstadoPaquete").getResultList();
		entityManager.close();
		estadoPaquete = new ArrayList<EstadoPaqueteDTO>();
		ArrayList<EstadoPaqueteDTO> result = new ArrayList<EstadoPaqueteDTO>();
		for(EstadoPaquete ep : lista){
			estadoPaquete.add(new EstadoPaqueteDTO(ep.getId(), ep.getDescripcion(), ep.getEstado()));
		}
		return estadoPaquete;
	}

	public int getId(String des)
	{
		if(estadoPaquete == null) CargaInicial();
		List <EstadoPaqueteDTO> lista = listEstadoPaquete();
		for (EstadoPaqueteDTO ep:lista){
			if (des.compareTo(ep.descripcion)==0)
				return ep.getId();
		}
		return -1;
	}
	
	@Override
	public boolean eliminarEstadoPaquete(int estadopaqueteId) {
		EntityManager entityManager = entityManagerFactory.createEntityManager();
		entityManager.getTransaction().begin();
		entityManager.createQuery("delete from EstadoPaquete where id = " + estadopaqueteId).executeUpdate();
		entityManager.getTransaction().commit();
		entityManager.close();
		return true;
	}
}
